`
https://leetcode.cn/problems/unique-paths/
`

/**
 * @param {number} m
 * @param {number} n
 * @return {number}
 */
var uniquePaths = function (m, n) {
  // 使用动态规划的方式手动推演一下，在把二维数组顺时针旋转45°，会发现其实就是杨辉三角
  // 所以可以通过计算杨辉三角上对应位置的值来直接得到结果
  // 机器人从左上角移动到右下角需要向下移动m-1次，向右移动n-1次，总共有(m+n-2)步
  // 我们需要在这些步数中选择向下移动的m-1次的位置（或者向右移动的n-1次的位置）
  // 因此路径数等于组合数C(m+n-2, min(m-1, n-1))
  const total = m + n - 2;
  const k = Math.min(m - 1, n - 1);

  // 计算 C(total, k)
  let result = 1;
  for (let i = 1; i <= k; i++) {
    result = result * (total - k + i) / i;
  }
  return result;
};